package com.sites.common;

import java.io.File;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.kit.PathKit;
import com.jfinal.render.RenderManager;
import com.jfinal.template.Template;

/**
 * 网页静态化转换拦截器
 * 目前只对首页进行静态页生成
 * 如有需要其他页面可参考该逻辑进行生成
 * 
 * @author zyg 2021年7月23日 下午11:14:28
 */
public class RewriteInterceptor implements Interceptor {

	@Override
	public void intercept(Invocation inv) {
		// 获取当前拦截的方法名
		String methodName = inv.getMethodName();

		/*
		 * 对于修改文章内容的方法需要将静态页置为无效
		 */
		if ("saveArt".equals(methodName) || "updateArt".equals(methodName) || "deleteArt".equals(methodName)
				|| "publishArt".equals(methodName) || "savePicArt".equals(methodName)) {
			inv.invoke();
			SiteInfo.useShtml = false;// 文章内容发生变化时，静态页内容要无效
		} else if ("index".equals(methodName)) {
			Controller controller = inv.getController();
			// 获取静态页面的路径
			String shtmlPath = PathKit.getWebRootPath() + File.separator + "cds" + File.separator + SiteInfo.siteSign + File.separator;
			// 获取首页的Template对象
			Template template = RenderManager.me().getEngine().getTemplate("/cds/" + SiteInfo.siteSign + "/index.html");
			File shtmlFile = new File(shtmlPath, "index.shtml");
			// 当前使用静态页并且静态页面存在，直接渲染静态页面
			if (SiteInfo.useShtml && shtmlFile.exists()) {
				controller.render("index.shtml");
			} else {// 不存在时先正常执行请求，并生成一次静态页面
				inv.invoke();
				template.render(null, shtmlFile);
				SiteInfo.useShtml = true;// 生成静态页后将使用静态页的标示置为true
			}
		} else {
			inv.invoke();
		}
	}
}
